<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    let set = new Set()
    // 添加
    set.add(1)
    set.add(2)
    set.add('hello')
    set.add({name: 'jack', age: 21})
    console.log('set:',set)

    // 删除
    set.delete(2)
    console.log(set)

    // 检查某个值是否存在
    console.log(set.has('hello')) // true

    // 长度
    console.log(set.size)  // 3

    // 遍历
    // set.forEach((val,key)=>{
    //     console.log(val,key) // set的键和值是相同的，一般不使用这种方式来遍历 ，无意义
    // })

    // set转换数组
    let set2 = new Set([1,2,2,3,4,4,5])
    console.log('set2:',set2)
    let arr = [...set2]
    console.log(arr)

    /**  下面仅了解  /
    // set中对象的引用无法释放
    let set3 = new Set(),obj = {id:1}
    set3.add(obj)
    obj = null // 释放
    console.log(set3) // 仍然有值

    // 使用weakSet可以释放  但有局限性
    //  不能传入非对象类型的参数
    //  不可迭代（不能遍历）
    //  没有size属性
    let set4 = new WeakSet(),obj2 = {id:2}
    set4.add(obj2)
    obj2 = null
    console.log(set4)
</script>
</body>
</html>
